package cn.util;

import java.math.BigInteger;
import java.security.MessageDigest;

import net.iharder.Base64;

public class EncodeUtil {
	/**
	 * java中的加密算法
	 * 
	 * @param target要加密的字符串
	 * @param               algorithm使用的加密算法：MD5、SHA、SHA-1、SHA-256
	 * @return String加密后的字符串
	 */
	public static String encode(String target, String algorithm) {
		try {
			// 获得加密对象
			MessageDigest msg = MessageDigest.getInstance(algorithm);
			// 上传、修改加密数据
			msg.update(target.getBytes());
			// 分解加密数据，返回字节数组
			byte[] bt = msg.digest();
			// 以btye数组位参数，构建BigInteger对象
			BigInteger bigInteger = new BigInteger(bt);
			// 通过bigInteger对象进行进制的转码，
			// String st = bigInteger.toString(16).toUpperCase();
			String st = bigInteger.toString(16);
			return st;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * BASE64的加密算法
	 * 
	 * @param target要加密的字符串
	 * @return String加密后的字符串
	 */
	public static String encryptBASE64(String target) {
		return Base64.encodeBytes(target.getBytes());
	}

	/**
	 * BASE64的解密算法
	 * 
	 * @param target要解密的字符串
	 * @return String解密后的字符串
	 */
	public static String decryptBASE64(String target) {
		try {
			return new String(Base64.decode(target), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		System.out.println(encryptBASE64("root123"));
		// cm9vdDEyMw==
		System.out.println(decryptBASE64("cm9vdDEyMw=="));
	}
	// 63A9F0EA7BB98050796B649E85481845,MD5
	// -2389160F3FFF91706E61F3AEA3992445C67D087B,SHA
	// -2389160F3FFF91706E61F3AEA3992445C67D087B,SHA-1
	// 4813494D137E1631BBA301D5ACAB6E7BB7AA74CE1185D456565EF51D737677B2,SHA-256

}
